package cn.iocoder.yudao.module.ai.tool.function;

import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpUtil;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.annotation.JsonClassDescription;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyDescription;
import jakarta.annotation.Resource;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.ai.chat.model.ToolContext;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.Map;
import java.util.function.BiFunction;

/**
 * 工具：工单查询
 *
 * 同时，也是展示 ToolContext 上下文的使用
 *
 * @author Ren
 */
@Component("work_sheet_query")
public class WorkSheetQueryToolFunction
        implements BiFunction<WorkSheetQueryToolFunction.Request, ToolContext, String> {

    @Resource
    private AdminUserApi adminUserApi;

    @Data
    @JsonClassDescription("工单信息查询")
    public static class Request {

        /**
         * 工单号
         */
        @JsonProperty(required = false,value = "workTickets")
        @JsonPropertyDescription("工单号，选填字段,用户没有指定时，默认为空")
        private String workTickets;

        @JsonProperty(required = false,value = "workStatus")
        @JsonPropertyDescription("工单状态（1进行中/2出库/3结束），选填字段,用户没有指定时，默认为空")
        private String workStatus;

        @JsonProperty(required = false,value = "sheetType")
        @JsonPropertyDescription("工单类型(1.作业单，2.试验单，3.报废单，4.同步工单，5.入库单)，，选填字段,用户没有指定时，默认为空")
        private String sheetType;

        @JsonProperty(required = false,value = "approvalStatus")
        @JsonPropertyDescription("审批状态 （0未审批，1已审批，3已驳回），选填字段,用户没有指定时，默认为空")
        private String approvalStatus;


        @JsonProperty(required = false,value = "userName")
        @JsonPropertyDescription("工单负责人，选填字段,用户没有指定时，默认为空")
        private String userName;

        @JsonProperty(required = false,value = "page")
        @JsonPropertyDescription("分页页码，选填字段,用户没有指定时，默认为1")
        private Integer page;

        @JsonProperty(required = false,value = "size")
        @JsonPropertyDescription("每页数量，用户没有指定工单类型时，size = -1，选填字段")
        private Integer size;

    }

//    @Data
//    @AllArgsConstructor
//    @NoArgsConstructor
//    public static class Response {
//
//    }

    @Override
    public String apply(Request request, ToolContext toolContext) {
        Map<String, Object> map = new HashMap<>();
        if (ObjectUtil.isEmpty(request.getSheetType())){
            map.put("size",-1);
            map.put("sheetType","1");
        }else {
            map.put("size",-1);
            map.put("sheetType", request.getSheetType());
        }

        map.put("page",1);

        if (!StrUtil.isEmpty(request.getWorkTickets())) {
            map.put("workTickets", request.getWorkTickets());
        }
        if (!StrUtil.isEmpty(request.getWorkStatus())) {
            map.put("workStatus", request.getWorkStatus());
        }

        if (!StrUtil.isEmpty(request.getUserName())) {
            map.put("userName", request.getUserName());
        }
        if (!StrUtil.isEmpty(request.getApprovalStatus())){
            map.put("approvalStatus", request.getApprovalStatus());
        }
        String result = HttpUtil.createPost("http://192.168.1.168:38090/admin-api/storeroom/work-sheets/list")
                .addHeaders(Map.of("Authorization", "aee80760f75c41c4866ecb9ef418c475"))
                .body(JSONObject.toJSONString(map))
                .execute()
                .body();
        return result;
    }

}
